package com.wzh.house.service.impl;

import com.wzh.common.utils.R;
import org.springframework.stereotype.Service;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.concurrent.TimeUnit;

import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzh.common.utils.PageUtils;
import com.wzh.common.utils.Query;

import com.wzh.house.dao.RentHouseDao;
import com.wzh.house.entity.RentHouseEntity;
import com.wzh.house.service.RentHouseService;

import javax.xml.ws.Action;


@Service("rentHouseService")
public class RentHouseServiceImpl extends ServiceImpl<RentHouseDao, RentHouseEntity> implements RentHouseService {
    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public PageUtils queryPage(Map<String, Object> params) {

        String key = (String) params.get("key");
        String page1 = (String) params.get("page");
        IPage<RentHouseEntity> houselist = (IPage<RentHouseEntity>) redisTemplate.boundHashOps("renthouse").get("list");
        //先判断是首页并且redis为null 并且key为null 就去查询数据库并存
        if (houselist==null&&Integer.parseInt(page1)==1&& StringUtils.isEmpty(key)){
            IPage<RentHouseEntity> page = this.page(
                    new Query<RentHouseEntity>().getPage(params),
                    new QueryWrapper<RentHouseEntity>()
            );
            System.out.println("查询数据库并缓存第一页");
            redisTemplate.boundHashOps("renthouse").put("list",page);
            redisTemplate.expire("renthouse",10, TimeUnit.SECONDS);

            return new PageUtils(page);
            //else if（再去判断是首页key为null 并且redis有数据）这个就去查询redis缓存
        }else if (houselist!=null&&Integer.parseInt(page1)==1&&StringUtils.isEmpty(key)){

            System.out.println("renthouse缓存命中");
            return  new PageUtils(houselist);

        }else { //else(  去直接查数据库 )
            System.out.println("直接去数据库查renthouse");
            IPage<RentHouseEntity> page = this.page(
                    new Query<RentHouseEntity>().getPage(params),
                    new QueryWrapper<RentHouseEntity>().like("house_name",key).or().like("house_address",key)
            );
            return new PageUtils(page);
        }
    }

    @Override
    public PageUtils queryPage1(Map<String, Object> params,Integer user_id) {
        QueryWrapper<RentHouseEntity> wrapper = new QueryWrapper<>();

        IPage<RentHouseEntity> page = this.page(
                new Query<RentHouseEntity>().getPage(params),
                wrapper.eq("user_id",user_id)

        );

        return new PageUtils(page);
    }

    @Override
    public List<RentHouseEntity> listById(Integer userId) {
        List<RentHouseEntity> list = baseMapper.selectId(userId);

        return list;
    }

//    @Override
//    @Transactional
//    public R getById1(Integer houseId) {
//        //先获取房子信息
//        RentHouseEntity rentHouseEntity = baseMapper.selectById(houseId);
//        //根据user找到用户
//        R info = userFeign.info(Long.valueOf(rentHouseEntity.getUserId()));
//        UserVo userVo = info.getData(new TypeReference<UserVo>(){});
//        //判断余额
//        BigDecimal b = new BigDecimal (1200);
//        //如果余额小于1200
//        if (userVo.getMoney().compareTo(b) < -1){
//
//            return R.error("余额不足，请先充值");
//        }
//        //大于1200就扣钱
//        userVo.setMoney(userVo.getMoney().subtract(b));
//        userFeign.update(userVo);
//        //设置花钱置顶的rent_sort 标记为3
//        rentHouseEntity.setRentSort(3);
//        //时间默认一个月 30天
//        rentHouseEntity.setDeadline(1);
//        //修改house
//        baseMapper.updateById(rentHouseEntity);
//        //列表要按照order by sort desc 和time desc 排序 查询
//        if (rentHouseEntity.getRentSort()==3){
//            return R.error("置顶未过期，请勿重复置顶");
//        }
//        String s = (String) redisTemplate.opsForValue().get(houseId+"");
//        if (org.apache.commons.lang.StringUtils.isNotEmpty(s)){
//            //如果redis获取的值不为空，就给他重置置顶时间一个月
//            redisTemplate.expire(houseId+"", 30, TimeUnit.DAYS);
//
//        }else {
//            redisTemplate.opsForValue().set(houseId+"",houseId+"",30, TimeUnit.DAYS);
//
//        }
//
//        return R.ok();
//    }

    @Override
    public List<RentHouseEntity> selectBySort() {
        return baseMapper.selectBySort(3);
    }

    @Override
    public List<RentHouseEntity> ListDesc() {
        return baseMapper.ListDesc();
    }

//    //每天凌晨1点执行一次
//    @Scheduled(cron = "0 0 1 * * *")
//    public void look(){
//        List<RentHouseEntity> list =baseMapper.selectBySort(3);
//        //查询全部sort为3 的房子
//        for (RentHouseEntity rentHouseEntity : list) {
//            //循环判断redis过期没
//            String o = (String) redisTemplate.opsForValue().get(rentHouseEntity.getHouseId() + "");
//            if (StringUtils.isNotEmpty(o)){
//                //过期就修改sort为0 和dealine为0
//                rentHouseEntity.setRentSort(0);
//                rentHouseEntity.setDeadline(0);
//                baseMapper.updateById(rentHouseEntity);
//            }
//        }
//
//    }
//

}